package Text27;

import java.util.*;

public class Main {
    /*一共有 n个数，编号是 1∼n，最开始每个数各自在一个集合中。现在要进行 m
    个操作，操作共有两种：M a b，将编号为 a和 b
    的两个数所在的集合合并，如果两个数已经在同一个集合中，则忽略这个操作；
    Q a b，询问编号为 a和 b的两个数是否在同一个集合中；*/
    /*输入格式
    第一行输入整数 n和 m。
    接下来 m行，每行包含一个操作指令，指令为 M a b 或 Q a b 中的一种。*/

    //并查集的核心操作，寻找根节点祖先 + 路径压缩
    static int N = 100010;
    static int[] p = new int[N];

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        for (int i = 1; i <= n; i++) {
            p[i] = i;
        }
        while (m-- > 0) {
            String s = scanner.next();
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            if (s.equals("M")) {
                p[find(a)] = find(b);
            } else if (s.equals("Q")) {
                if(find(a)==find(b)){
                    System.out.println("Yes");
                }else{
                    System.out.println("No");
                }
            }
        }
    }

    private static int find(int x) {
        if (x != p[x]) {
            p[x] = find(p[x]);
        }
        return p[x];
    }
}
